package model;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class DataSet {

	private int numConeccoes = 0;
	private int percentagemNormal = 0;
	private String ficheiro = "";
	private String text;
	private int total_ligacoes_normais;
	private int total_outros;
	private int quantidade_de_ligacoes_enrradas_por_tipo = 0;
	private Map<String, Integer> tipoConeccoesMap;

	public DataSet(int numConeccoes, int percentagemNormal, String ficheiro) {
		tipoConeccoesMap = new HashMap<String, Integer>();
		this.numConeccoes = numConeccoes;
		this.percentagemNormal = percentagemNormal;
		this.ficheiro = ficheiro;

		total_ligacoes_normais = (int) Math
				.round((((double) percentagemNormal / 100) * numConeccoes));
		total_outros = numConeccoes - total_ligacoes_normais;

	}

	public int getTotalDeLigacoesComErro() {
		return total_outros;
	}

	public int getTotal_ligacoes_normais() {
		return total_ligacoes_normais;
	}

	public void addTipoConeccao(String a) {
		quantidade_de_ligacoes_enrradas_por_tipo = total_outros
				/ (tipoConeccoesMap.size() + 1);
		tipoConeccoesMap.put(a, quantidade_de_ligacoes_enrradas_por_tipo);
		for (Entry<String, Integer> it : tipoConeccoesMap.entrySet()) {
			it.setValue(quantidade_de_ligacoes_enrradas_por_tipo);
		}
	}

	public int getTipoConeccoesSize() {
		return tipoConeccoesMap.size();
	}

	public int getNumConeccoes() {
		return numConeccoes;
	}

	public int getPercentagemNormal() {
		return percentagemNormal;
	}

	public String getFicheiro() {
		return ficheiro;
	}

	public boolean contains(String str) {

		boolean result = false;

		for (Entry<String, Integer> string : tipoConeccoesMap.entrySet()) {
			if (str.contains(string.getKey()) && string.getValue() != 0) {
				string.setValue(string.getValue() - 1);
				result = true;
			}
		}
		return result;
	}

	public String getIncompleteErrorTipes() {
		String messsage = "";
		for (Entry<String, Integer> string : tipoConeccoesMap.entrySet()) {
			if (string.getValue() != 0) {
				messsage = messsage
						+ "- No ficheiro "
						+ getFileName()
						+ " foram apenas encontrados "
						+ Math.abs((quantidade_de_ligacoes_enrradas_por_tipo - string
								.getValue())) + "" + " do total de "
						+ quantidade_de_ligacoes_enrradas_por_tipo
						+ " do tipo de erro " + string.getKey() + "\n\n";
			}
		}

		return messsage;
	}

	public void setTrainingFileName(String text) {
		this.text = text;
	}

	public String getFileName() {
		return text;
	}
}
